﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;

namespace ApplicationTemplate
{
    class CreateDacClass
    {
        private static DataSet FieldsDs = null;

        private static String realTableName = String.Empty;
        public static String CreateDACTemplate(String spaceName, String className, String damClassName, String DAMClassName, String modeClassName, String tableName, DataSet ds)
        {
            realTableName = tableName;
            String DAMInstanceName = DAMClassName.Substring(0, 1).ToLower() + DAMClassName.Substring(1);

            FieldsDs = ds;
            tableName = ApplcationTemplate.GetTableName(tableName); ;

            String model = String.Format(@"using System;
using System.Collections.Generic;
using System.Data;
using Sics.Framework.Common;
using Sics.Framework.Consts;
using Sics.Framework.Core;
using Sics.Framework.Dam;
using Sics.Framework.Error;
using Sics.Framework.Filter;

namespace {0}
{{
    public partial class {1}
    {{
        private {2} {3};

        /// <summary>
        /// コンストラクタ
        /// </summary>
        public {1}()
        {{
            {3} = new {2}();
        }}

        /// <summary>
        /// 追加処理
        /// </summary>
        /// <param name=""model"">データモデル</param>
        /// <param name=""dbManager"">データベースマネージャ</param>
        /// <returns>処理結果</returns>
        {5}

        /// <summary>
        /// 添加处理
        /// </summary>
        /// <param name=""model"">データモデル</param>
        /// <returns>処理結果</returns>
        {6}

        /// <summary>
        /// 更新処理
        /// </summary>
        /// <param name=""model"">データモデル</param>
        /// <param name=""dbManager"">データベースマネージャ</param>
        /// <returns>処理結果</returns>
        {7}

        /// <summary>
        /// 更新処理
        /// </summary>
        /// <param name=""model"">データモデル</param>
        /// <returns>処理結果</returns>
        {8}

        /// <summary>
        /// 削除処理
        /// </summary>
        /// <param name=""model"">データモデル</param>
        /// <param name=""dbManager"">データベースマネージャ</param>
        /// <returns>処理結果</returns>
        {9}

        /// <summary>
        /// 削除処理
        /// </summary>
        /// <param name=""model"">データモデル</param>
        /// <returns>処理結果</returns>
        {10}

        /// <summary>
        /// 詳細情報を取得する
        /// </summary>
        /// <param name=""model"">データモデル</param>
        /// <param name=""dbManager"">データベースマネージャ</param>
        /// <returns>データセット</returns>
        {11}

        /// <summary>
        /// 詳細情報を取得する
        /// </summary>
        /// <param name=""model"">データモデル</param>
        /// <returns>データセット</returns>
        {12}

        /// <summary>
        /// レコードステータスを更新する
        /// </summary>
        /// <param name=""model"">データモデル</param>
        /// <param name=""dbManager"">データベースマネージャ</param>
        /// <returns>処理結果</returns>
        {13}
        
        /// <summary>
        /// レコードステータスを更新する
        /// </summary>
        /// <param name=""model"">データモデル</param>
        /// <returns>処理結果</returns>
        {14}

        /// <summary>
        /// DataRow⇒データモデルに変換する
        /// </summary>
        /// <param name=""row"">数据行</param>
        /// <returns>データモデル</returns>
        {15}

        /// <summary>
        /// DataSet⇒データモデルリストに変換する
        /// </summary>
        /// <param name=""ds"">データセット</param>
        /// <returns>データモデルLIST</returns>
        {16}

        /// <summary>
        /// すべて情報を取得する
        /// </summary>
        /// <param name=""dbManager"">データベースマネージャ</param>
        /// <returns>データセット</returns>
        {17}

        /// <summary>
        /// すべて情報を取得する
        /// </summary>
        /// <returns>データセット</returns>
        {18}
    }}
}}", spaceName, className, DAMClassName, DAMInstanceName, damClassName,
                CreateDacInsertAPI.CreateInsert(realTableName, modeClassName, FieldsDs, DAMInstanceName),
                CreateDacInsertAPI.CreateInsertNoDbManager(realTableName, modeClassName, FieldsDs, DAMInstanceName),

                CreateDacUpdateAPI.CreateUpdate(realTableName, modeClassName, FieldsDs, DAMInstanceName),
                CreateDacUpdateAPI.CreateUpdateNoDbManager(realTableName, modeClassName, FieldsDs, DAMInstanceName),

                CreateDacDeleteAPI.CreateDelete(realTableName, modeClassName, FieldsDs, DAMInstanceName),
                CreateDacDeleteAPI.CreateDeleteNoDbManager(realTableName, modeClassName, FieldsDs, DAMInstanceName),

                CreateDacSelectAPI.CreateSelect(realTableName, modeClassName, FieldsDs, DAMInstanceName),
                CreateDacSelectAPI.CreateSelectNoDbManager(realTableName, modeClassName, FieldsDs, DAMInstanceName),

                CreateDacUpdateStatusAPI.CreateUpdateStatus(realTableName, modeClassName, FieldsDs, DAMInstanceName),
                CreateDacUpdateStatusAPI.CreateUpdateStatusNoDbManager(realTableName, modeClassName, FieldsDs, DAMInstanceName),
                CreateDacChangeAPI.CreateChangeModel(modeClassName, FieldsDs),
                CreateDacChangeAPI.CreateChangeDs(modeClassName),
                CreateDacSelectAPI.CreateSelectAll(realTableName, modeClassName, FieldsDs, DAMInstanceName),
                CreateDacSelectAPI.CreateSelectAllNoDbManager(realTableName, modeClassName, FieldsDs, DAMInstanceName)
             );

            return model;
        }
    }
}
